package br.com.localab.ambiente.modelo;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

public class RepositorioAmbiente implements IRepositorioAmbiente, Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Session s;
	
	public RepositorioAmbiente(Session s) {
		this.s = s;
	}
	
	public void cadastrarAmbiente(Ambiente ambiente) throws AmbienteJaCadastradoException{
		try{
			s.save(ambiente);
		}catch(Exception e){
		  throw	new AmbienteJaCadastradoException(ambiente.getAmbiente_PK().getNome());
		}
	}
	
	public void editarAmbiente(Ambiente ambiente) throws AmbienteNaoEncontradoException{
		try{
			s.update(ambiente);
		}catch(Exception e){
		  throw	new AmbienteNaoEncontradoException(ambiente.getAmbiente_PK().getNome());
		}
	}
	
	public Ambiente procurar(Ambiente_PK ambiente_PK) throws AmbienteNaoEncontradoException{
		Ambiente ambiente;
		try{
			ambiente  = (Ambiente) s.load(Ambiente.class, ambiente_PK);
			System.out.println(ambiente.getAmbiente_PK().getNome());
		return ambiente;
		}catch(Exception e){
			throw new AmbienteNaoEncontradoException(ambiente_PK.getNome());
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Ambiente> listar(){
		return s.createCriteria(Ambiente.class).list();
	}
	
	@SuppressWarnings("unchecked")
	public List<Ambiente> list(String nomeCampo, boolean valorCampo) {
		Criteria c = s.createCriteria(Ambiente.class);
		c.add(Expression.eq(nomeCampo, valorCampo));
		c.setCacheable(false);
		return c.list();
	}
	
	public Ambiente procurar(String nomeCampo, String valorCampo) throws AmbienteNaoEncontradoException{
		try{
		Criteria c = s.createCriteria(Ambiente.class);
		c.add(Expression.eq(nomeCampo, valorCampo));
		c.setCacheable(true);
		Ambiente ambiente = (Ambiente) c.uniqueResult();
		System.out.println(ambiente.getAmbiente_PK().getNome());
		return ambiente;
		}catch(Exception e){
			throw new AmbienteNaoEncontradoException(valorCampo);
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Ambiente> list(String nomeCampo, boolean valorCampo,String nomeCampo2,Long valorCampo2,String nomeCampo3, Long valorCampo3
			) {
		Criteria c = s.createCriteria(Ambiente.class);
		c.add(Expression.eq(nomeCampo, valorCampo));
		c.add(Expression.eq(nomeCampo2, valorCampo2));
		c.add(Expression.eq(nomeCampo3, valorCampo3));
		c.setCacheable(false);
		return c.list();
	}
	
}
